"""
数据分组：
    df.groupby(by=None, axis=0, as_index=True, sort=True)
"""
import pandas as pd

pd.set_option('display.unicode.east_asian.width', True)
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 100)
pd.set_option('display.width', 1000)

excel = pd.read_excel('resources/电脑配件销售记录.xlsx')
print(excel)
print('========================')

excel1 = excel[['产品名称', '数量', '标准单价']]
print(excel1)

# 按照单列分组统计
print(excel1.groupby('产品名称', as_index=False).sum())

# 按照多列分组统计
excel1 = excel[['产品名称', '销售员', '数量']]
excel1 = excel1.groupby(['产品名称', '销售员']).sum()
print(excel1)

# 分组并按指定列进行计算 -- 只对数量求和
excel1 = excel[['产品名称', '数量', '标准单价']]
print(excel1.groupby('产品名称')['数量'].sum())

# 一列分组的数据迭代
excel = pd.read_excel('resources/电脑配件销售记录.xlsx')
print(excel)
excel1 = excel[['产品名称', '数量', '标准单价']]  # 提取数据
print(excel1.groupby('产品名称'))  # 返回DataFrameGroupBy对象

for name, group in excel1.groupby('产品名称'):
    print(name)
    print(group)
    print('-------------------')

# 多列分组的数据迭代
excel1 = excel[['产品名称', "销售员", '数量']]  # 提取数据
print(excel1.groupby(['产品名称', '销售员']))
for (k1, k2), group in excel1.groupby(['产品名称', '销售员']):
    print(k1, k2)
    print(group)
    print('-------------------')

"""
聚合函数
"""
excel = pd.read_excel('resources/电脑配件销售记录.xlsx')
excel1 = excel[['产品名称', '数量']]  # 提取数据
print(excel1)

print(excel1.groupby('产品名称').agg(['sum', 'mean']))

# 对不同的列采用不同的聚合函数
excel1 = excel[['产品名称', '数量', '成交金额']]
excel1 = excel1.groupby('产品名称').agg({'数量': ['sum', 'mean'], '成交金额': ['max']})
print(excel1)
print('---------------------')

"""
使用自定义函数实现分组统计
"""
excel = pd.read_excel('resources/电脑配件销售记录.xlsx')
print(excel)
print(excel['产品名称'].value_counts())
maxCount = lambda x: x.value_counts().index[0]
maxCount.__name__ = '出现最多的产品'
excel1 = excel.agg({'产品名称': [maxCount], '数量': ['sum']})
print(excel1)

"""
通过字典或Series对象进行分组统计
"""
# 使用字典
excel = pd.read_excel('resources/JD手机销售数据.xlsx')
print(excel)

excel = excel.set_index('商品名称')
dict1 = {'北京出库销量': '华北地区',
         '上海出库销量': '华东地区',
         '广州出库销量': '华南地区',
         '天津出库销量': '华北地区',
         '苏州出库销量': '华东地区',
         '沈阳出库销量': '东北地区',
         '杭州出库销量': '华东地区'}
excel = excel.groupby(dict1, axis=1).sum()
print(excel)

# 使用Series
excel = pd.read_excel('resources/JD手机销售数据.xlsx')
print(excel)

excel = excel.set_index('商品名称')
dict1 = {'北京出库销量': '华北地区',
         '上海出库销量': '华东地区',
         '广州出库销量': '华南地区',
         '天津出库销量': '华北地区',
         '苏州出库销量': '华东地区',
         '沈阳出库销量': '东北地区',
         '杭州出库销量': '华东地区'}
s=pd.Series(dict1)
print(s)
excel = excel.groupby(s, axis=1).sum() # 分组，按行，统计求和
print(excel)